SQLAlchemy
Version: 1.1 기준
Connection
- engine 생성
- connection/session 생성
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine("mysql://user:pass@host")
Session = sessionmaker(bind=engine)
session = Session()
try:
session.add(MyModelObject)
session.commit()
except:
session.rollback()
raise
finally:
session.close()
Connection String
engine은 DBMS에 따라 조금씩 다르다.
MySQL
- MySQL-Python 등 많으니깐...
- mysql://user:password@host
Oracle
- cx-Oracle 사용: Anaconda에서는
conda install cx_oracle
- oracle+cx_oracle://user:password@host/SIDNAME
Connection
Session을 이용해서 ORM으로 사용할 수도 있고, ORM이 아닌 DBAPI(예전 방식)로도 사용이 가능하다.
connection = engine.raw_connection()
try:
cursor = connection.cursor()
cursor.callproc("my_procedure", ['x', 'y', 'z'])
results = list(cursor.fetchall())
cursor.close()
connection.commit()
finally:
connection.close()
테이블 생성
모든 model 테이블을 생성하는 방법과 하나의 테이블만 선택적으로 생성하는 방법이 있다. 생성하려는 테이블의 클래스가 모두 Base를 상속받는다는 전제가 있어야 한다. (
Base = declarative_base()
)
모든 테이블 생성
Base.metadata.create_all(engine)
타겟 테이블만 생성
class MyTable(Base):
__tablename__ = "my_table"
...
mytable = MyTable()
mytable.__table__.create(engine)